#!/usr/bin/python
# -*- coding: utf-8 -*-

"""
  Функции работы со страницами
"""

from engine import settings
from google.appengine.ext import db
from google.appengine.api import memcache


class Page(db.Model):
  """Класс БД страница
  """

  URL = db.StringProperty(verbose_name = "Адрес страницы", required=True)
  Title = db.StringProperty(verbose_name = "Заголовок страницы")
  Description = db.StringProperty(verbose_name = "Описание страницы")
  Content = db.TextProperty(verbose_name = "Содержание страницы", required=True)
  Date = db.DateTimeProperty(verbose_name = "Дата/Время создания", auto_now_add=True)
#  Author = db.UserProperty(verbose_name = "Автор")

def AddPage(page):
  """Добавить страницу
  Args:
    page: dict страницы
  """

  p = GetPages(page['url'])                                     # пытаемся узнать, есть ли уже такая страница в базе
  if not p:                                                     # если нет, создаем новую
    p = Page( URL = page['url'],
              Title = unicode(page['title']),
              Description = unicode(page['description']),
              Content = unicode(page['content']) )
  else:                                                         # иначе обновляем данные
    p.URL = page['url']
    p.Title = unicode(page['title'])
    p.Description = unicode(page['description'])
    p.Content = unicode(page['content'])
    memcache.delete('page_' + p.URL)                            # удаляем из кэша старую страницу
    #memcache.replace("page_" + p.URL, p, settings.PAGECACHE)    # обновляем кэш
    
  return p.put()

def GetPages(url = ''):
  """Получить страницы из базы
  Args:
    url: получить страницу по полю URL из базы. если пусто - получить все страницы из базы
  """

  if url:
    p = memcache.get('page_' + url)                             # пытаемся получить страницу из кэша
    if p is None:                                               # если ее там не оказалось
      p = Page.all().filter('URL', url).get()                   # получаем страницу из базы
      memcache.add('page_' + url, p, settings.PAGECACHE)        # кладем страницу в кэш
  else:
    p = Page.all().order('URL')

  return p
  
def DelPage(page):
  """Удаление страницы
  Args:
    page: ключи для выборки из базы данных
  """

  results = Page.get(page)
  for result in results:
    memcache.delete('page_' + result.URL)                       # удаляем страницу из кэша
    result.delete()                                             # удаляем страницу из базы

def DropPages():
  """Удалить таблицу страниц
  """
  db.Delete(Pages.all())
  #db.Delete(Model.all())